先定義一個 Attribute
[AttributeUsage(AttributeTargets.Method, AllowMultiple = true)]
public class HeaderAttribute : Attribute
{
    public string Name { get; set; }
 
    public string Type { get; set; }
 
    public object[] EnumValues { get; set; }
 
    public bool Required { get; set; }
 
    public object Default { get; set; }
}
依照需求,把掛在 Action 上
public class ValuesController : ApiController
{
    [Header(Name = "Header1", Type = "string", EnumValues = new object[] {1, 2, 3}, Default = "2")]
    public IEnumerable<string> Get()
    {
        return new[] {"value1", "value2"};
    }
}
實作 IOperationFilter,用來把 Action 上面的 HeaderAttribute,放到Operation.parameters
public class HeaderFilter : IOperationFilter
{
    public void Apply(Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription)
    {
        var headers = apiDescription.ActionDescriptor.GetCustomAttributes<HeaderAttribute>();
        if (!headers.Any())
        {
            return;
        }
 
        if (operation.parameters == null)
        {
            operation.parameters = new List<Parameter>();
        }
 
        foreach (var header in headers)
        {
            var parameter = new Parameter
            {
                name = header.Name,
                @in = "header",
                type = header.Type,
                @enum = header.EnumValues?.ToList(),
                required = header.Required,
                @default = header.Default
            };
            operation.parameters.Add(parameter);
        }
    }
}
在 SwaggerConfig.cs 裡面套用
c.OperationFilter<HeaderFilter>();
參考來源: